﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;

public partial class Views_Organizations : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }
    protected void StoreOrganization_ReadData(object sender, Ext.Net.StoreReadDataEventArgs e)
    {
        BindData();
    }

    private void BindData()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                List<View_Ogranizations> listViewOrg = db.View_Ogranizations.ToList<View_Ogranizations>();

                StoreOrganization.DataSource = listViewOrg;
                //StoreOrganization.DataSource = db.View_Ogranizations.Where(v => v.NameOfOrgan.ToLower().Contains("p"));
                StoreOrganization.DataBind();

                GridPanelOrganization.ActiveIndex = -1;
            }
        }
        catch (Exception)
        {
            X.Msg.Notify("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void RowSelect(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelOrganization.SelectionModel.Primary as RowSelectionModel;

                int orgID = Int32.Parse(rsm.SelectedRow.RecordID);
                Organization org = db.Organizations.Single(o => o.OrgID == orgID);

                lblViewCodeOfOrg.Text = org.CodeOfOgran;
                lblViewNameOfOrg.Text = org.NameOfOrgan;
                lblViewDesOfOrg.Text = org.Descriptons;
                lblViewCommune.Text = org.Commune.NameOfComm;
                lblViewDistrict.Text = org.Commune.District.NameOfDist;
                lblViewProvince.Text = org.Commune.District.Province.NameOfProvince;
                chkViewDistStatus.Checked = Boolean.Parse(org.OrgStatus.ToString());
            }

        }
        catch (Exception)
        {
            X.Msg.Notify("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxProvinces_SelectedChange()
    {
        try
        {
            string provID = cbxProvinces.Value.ToString();
            if (provID.Equals(""))
            {
                StoreDistrict.DataSource = null;
                StoreDistrict.DataBind();
            }

            int proID = Int32.Parse(provID);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                Province province = db.Provinces.Single(p => p.ProvID == proID);
                StoreDistrict.DataSource = province.Districts.ToList<District>();
                StoreDistrict.DataBind();

                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void cbxDistrict_SelectedChange()
    {
        try
        {
            string distSelect = cbxDistrict.Value.ToString();
            if (distSelect.Equals(""))
            {
                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();
            }
            int distID = Int32.Parse(distSelect);
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                District province = db.Districts.Single(p => p.DistID == distID);
                StoreCommune.DataSource = province.Communes.ToList<Commune>();
                StoreCommune.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnToobarAdd_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                WindownAdd.Hidden = false;
                ResetControls_WindownAdd();

                List<Province> listProv = db.Provinces.ToList<Province>();
                SortObjectsProvinces sort = new SortObjectsProvinces();
                listProv.Sort(sort.Compare_ProvinceName_ASC);
                storeProvince.DataSource = listProv;
                storeProvince.DataBind();

                StoreCommune.DataSource = new List<Commune>(); ;
                StoreCommune.DataBind();

                StoreDistrict.DataSource = new List<District>();
                StoreDistrict.DataBind();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }

    }

    protected void menuItemAdd_DirectClick(object sender, DirectEventArgs e)
    {
        if (cbxProvinces.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn tỉnh thành";
            cbxProvinces.Focus(true, 100);
            return;
        }
        if (cbxDistrict.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn quận huyện";
            cbxDistrict.Focus(true, 100);
            return;
        }
        if (cbxCommune.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn xã phường";
            cbxCommune.Focus(true, 100);
            return;
        }
        if (txtFormAddCodeOrg.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Mã cơ quan không  được để trống";
            txtFormAddCodeOrg.Focus(true, 100);
            return;
        }
        if (txtFormAddNameOrg.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Tên cơ quan không  được để trống";
            txtFormAddNameOrg.Focus(true, 100);
            return;
        }
        if (txtFormAddDes.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Mô tả không  được để trống";
            txtFormAddDes.Focus(true, 100);
            return;
        }
        lblFormAddMsg.Text = "";
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string orgCode = txtFormAddCodeOrg.Text.Trim();

                foreach (var item in db.Organizations.ToList<Organization>())
                {
                    if (item.CodeOfOgran.ToLower().Equals(orgCode.ToLower()))
                    {
                        lblFormAddMsg.Text = "Mã cơ quan đã được sử dụng, hãy nhập mã khác";
                        txtFormAddCodeOrg.Focus(true, 100);
                        return;
                    }
                }
                lblFormAddMsg.Text = "";

                int comID = Int32.Parse(cbxCommune.Value.ToString());
                Organization org = new Organization()
                {
                    ComID = comID,
                    CodeOfOgran = txtFormAddCodeOrg.Text.Trim(),
                    NameOfOrgan = txtFormAddNameOrg.Text.Trim(),
                    Descriptons = txtFormAddDes.Text.Trim(),
                    OrgStatus = chkFormAddStatus.Checked
                };

                db.Organizations.Add(org);
                db.SaveChanges();

                BindData();
                ResetControls_WindownAdd();
                X.Msg.Notify("Thông báo", "Thêm mới cơ quan thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }

    }

    protected void menuItemAddAndClose_DirectClick(object sender, DirectEventArgs e)
    {
        if (cbxProvinces.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn tỉnh thành";
            return;
        }

        if (cbxDistrict.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn quận huyện";
            return;
        }

        if (cbxCommune.Value.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Bạn chưa chọn xã phường";
            return;
        }

        if (txtFormAddCodeOrg.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Mã cơ quan không  được để trống";
            txtFormAddCodeOrg.Focus(true, 100);
            return;
        }
        if (txtFormAddNameOrg.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Tên cơ quan không  được để trống";
            txtFormAddNameOrg.Focus(true, 100);
            return;
        }
        if (txtFormAddDes.Text.ToString().Equals(""))
        {
            lblFormAddMsg.Text = "Mô tả không  được để trống";
            txtFormAddDes.Focus(true, 100);
            return;
        }
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                string orgCode = txtFormAddCodeOrg.Text.Trim();

                try
                {
                    Organization checkOrg = db.Organizations.Single(o => o.CodeOfOgran.ToLower().Equals(orgCode.ToLower()));
                    lblFormAddMsg.Text = "Mã cơ quan đã được sử dụng, hãy nhập mã khác";
                    txtFormAddCodeOrg.Focus(true, 100);
                    return;
                }
                catch (Exception)
                {
                }
                int comID = Int32.Parse(cbxCommune.Value.ToString());
                Organization org = new Organization()
                {
                    ComID = comID,
                    CodeOfOgran = txtFormAddCodeOrg.Text.Trim(),
                    NameOfOrgan = txtFormAddNameOrg.Text.Trim(),
                    Descriptons = txtFormAddDes.Text.Trim(),
                    OrgStatus = chkFormAddStatus.Checked
                };

                db.Organizations.Add(org);
                db.SaveChanges();

                BindData();
                ResetControls_WindownAdd();
                WindownAdd.Hidden = true;
                X.Msg.Notify("Thông báo", "Thêm mới cơ quan thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }

    }

    protected void btnAddCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindownAdd.Hidden = true;
        ResetControls_WindownAdd();
    }

    protected void btnToobarUpdate_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelOrganization.SelectionModel.Primary as RowSelectionModel;

                if (!rsm.SelectedRow.RecordID.Equals(""))
                {
                    lblUpdateMsg.Text = "";
                    WindowUpdate.Hidden = false;

                    int orgID = Int32.Parse(rsm.SelectedRow.RecordID);
                    Organization org = db.Organizations.Single(o => o.OrgID == orgID);

                    txtUpdateProvince.Text = org.Commune.District.Province.NameOfProvince;
                    txtUpdateDistrict.Text = org.Commune.District.NameOfDist;
                    txtUpdateCommune.Text = org.Commune.NameOfComm;

                    txtUpdateCodeOfOrg.Text = org.CodeOfOgran;
                    txtUpdateNameOfOrg.Text = org.NameOfOrgan;
                    txtUpdateDes.Text = org.Descriptons;
                    chkUpdateStatus.Checked = Boolean.Parse(org.OrgStatus.ToString());
                }
                else
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn cơ quan, tổ chức để cập nhật thông tin").Show();
                    return;
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    protected void btnUpdateSave_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {

            if (txtUpdateCodeOfOrg.Text.ToString().Equals(""))
            {
                lblUpdateMsg.Text = "Mã cơ quan không  được để trống";
                txtUpdateCodeOfOrg.Focus(true, 100);
                return;
            }
            if (txtUpdateNameOfOrg.Text.ToString().Equals(""))
            {
                lblUpdateMsg.Text = "Tên cơ quan không  được để trống";
                txtUpdateNameOfOrg.Focus(true, 100);
                return;
            }
            if (txtUpdateDes.Text.ToString().Equals(""))
            {
                lblUpdateMsg.Text = "Mô tả không  được để trống";
                txtUpdateDes.Focus(true, 100);
                return;
            }
            lblUpdateMsg.Text = "";

            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelOrganization.SelectionModel.Primary as RowSelectionModel;

                int orgID = Int32.Parse(rsm.SelectedRow.RecordID);
                Organization org = db.Organizations.Single(o => o.OrgID == orgID);

                string orgCode = txtUpdateCodeOfOrg.Text.Trim();
                string orgName = txtUpdateNameOfOrg.Text.Trim();

                foreach (var item in db.Organizations.ToList<Organization>())
                {
                    if (item.CodeOfOgran.ToLower().Equals(orgCode.ToLower()) && !item.CodeOfOgran.ToLower().Equals(org.CodeOfOgran.ToLower()))
                    {
                        lblUpdateMsg.Text = "Mã cơ quan đã được sử dụng, hãy nhập mã khác";
                        txtUpdateCodeOfOrg.Focus(true, 100);
                        return;
                    }
                }
                Commune com = db.Communes.Single(c => c.ComID == org.ComID);

                foreach (var item in com.Organizations.ToList<Organization>())
                {
                    if (item.NameOfOrgan.ToLower().Equals(orgName.ToLower()) && !item.NameOfOrgan.ToLower().Equals(org.NameOfOrgan.ToLower()))
                    {
                        lblUpdateMsg.Text = "Trong xã phường đã có cơ quan tổ chức này";
                        txtUpdateNameOfOrg.Focus(true, 100);
                        return;
                    }
                }

                org.CodeOfOgran = orgCode;
                org.NameOfOrgan = orgName;
                org.Descriptons = txtUpdateDes.Text.Trim();
                org.OrgStatus = chkUpdateStatus.Checked;

                db.SaveChanges();
                BindData();
                WindowUpdate.Hidden = true;
                X.Msg.Notify("Thông báo", "Cập nhật thông tin cơ quan tổ chức thành công.").Show();

            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }

    }

    protected void btnUpdateCancel_DirectClick(object sender, DirectEventArgs e)
    {
        WindowUpdate.Hidden = true;
        ResetControls_WindownUpdate();
    }

    protected void btnToobarDelete_DirectClick(object sender, DirectEventArgs e)
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelOrganization.SelectionModel.Primary as RowSelectionModel;
                if (rsm.SelectedRow != null)
                {
                    int orgID = Int32.Parse(rsm.SelectedRow.RecordID);
                    Organization org = db.Organizations.Single(d => d.OrgID == orgID);

                    X.Msg.Confirm("Thông báo hệ thống", String.Format("Bạn có muốn xóa cơ quan đã chọn ? [{0}]", org.NameOfOrgan),
                        new MessageBoxButtonsConfig()
                        {
                            Yes = new MessageBoxButtonConfig
                            {
                                Text = "Xóa",
                                Handler = "App.direct.DoYes_DeleteOrganization();"
                            },
                            No = new MessageBoxButtonConfig
                            {
                                Text = "Hủy bỏ"
                            }
                        }).Show();
                }
                else
                {
                    X.Msg.Alert("Thông báo", "Bạn chưa chọn cơ quan để xóa bỏ").Show();
                    return;
                }
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, xin bạn vui lòng quay lại sau").Show();
        }
    }

    [DirectMethod]
    public void DoYes_DeleteOrganization()
    {
        try
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                RowSelectionModel rsm = GridPanelOrganization.SelectionModel.Primary as RowSelectionModel;
                int orgID = Int32.Parse(rsm.SelectedRow.RecordID);
                Organization org = db.Organizations.Single(d => d.OrgID == orgID);

                db.Organizations.Remove(org);
                db.SaveChanges();

                ResetControls_FormView();
                BindData();

                X.Msg.Notify("Thông báo", "Xóa cơ quan thành công").Show();
            }
        }
        catch (Exception)
        {
            X.Msg.Alert("Thông báo", "Hệ thống đang bận, hãy thử lại sau.").Show();
        }
    }
    
    private void ResetControls_WindownAdd()
    {
        lblFormAddMsg.Text = "";
        cbxProvinces.Value = "";
        cbxDistrict.Value = "";
        cbxCommune.Value = "";
        txtFormAddCodeOrg.Text = "";
        txtFormAddNameOrg.Text = "";
        txtFormAddDes.Text = "";
        chkFormAddStatus.Checked = false;
    }

    private void ResetControls_WindownUpdate()
    {
    }

    private void ResetControls_FormView()
    {
        lblViewCodeOfOrg.Text = "";
        lblViewNameOfOrg.Text = "";
        lblViewDesOfOrg.Text = "";
        lblViewCommune.Text = "";
        lblViewDistrict.Text = "";
        lblViewProvince.Text = "";
        chkViewDistStatus.Checked = false;
    }


}